// Factor 案例演示

// class Container {
//     constructor (value){
//         this._value = value  // this._value是内部的私有成员， 不允许之间在外部进行访问
//     }
//     map(fun){ // 抛出了一个共有成员map， 接收一个函数来操作私用成员并返回新的Container
//         return new Container(fun(this._value))
//     }
// }
// map可以被链式调用，从左往右执行，每次调用map时的值都是上一个链式返回的值
// const result = new Container(5).map(v=>v+1).map(v=>v*v)
// console.log(result)


// 优化： 减少链式调用map的时候对象被多次创建
class Container {

    static of (value){
        return new Container(value)
    }

    constructor (value){
        this._value = value  
    }

    map(fun){ 
        return Container.of(fun(this._value))
    }
}

// const result = Container.of(5).map(v=>v+3).map(v=>v*v)
// console.log(result)

// 演示 null undefind
const result = Container.of(null).map(v=>v.toUpperCase())
console.log(result)